\par O \textit{Django\footnote{O nome Django é inspirado no guitarrista Django 
Reinhardt.}} é um \textit{framework} usado para desenvolver aplicações web que
surgiu no outono de 2003, foi desenvolvido por uma equipe do \textit{Journal-World} em
Lawrence no Kansas, Estados Unidos, com o intuito de ser uma ferramenta para o 
desenvolvimento rápido de páginas dinâmicas -- e também aplicações -- web. O 
intuito era publicar notícias para um site local que possuia uma 
programação intensa e muitas vezes com apenas alguns dias ou horas para realizar 
a publicação\cite{Definite_guide_django}.

\par Adrian Holovaty e Simon Willison, escolheram python para inciar a
construção das aplicações na plataforma web que utilizasse MVC
\footnote{Model ­View­ Controller} e que simplificasse a administração de
site dinâmicos, o \textit{Django}.

\par No verão de 2005, quando já haviam desenvolvido o \textit{framework}
com a finalidadde desejada, resolveram -- com a ajuda de Jacob Kaplan-Moss -- 
torná-lo um projeto \textit{open source}. Por ser um porjeto de fonte aberta, 
atualmente o Django é um projeto que envolve colaboradores do mundo todo.

\par Segundo \citeonline{entendendo_django} o \textit{Django} funciona da seguinte
maneira:
\nocite{Aprendendo_Django}

\par Quando uma requisição chega ao servidor web, este passa a solicitação para 
o \textit{middleware} que é o responsável por controlar a entrada(
\textit{request}) e saída(\textit{response}), este por sua vez envia o pedido para o 
\textit{URL dispatcher} que invocará a \textit{view} responsável pela página que foi 
solicitada, a \textit{view} é uma função escrita em \textit{Python}, sua função 
é analisar a requisição, fazer algo no banco de dados e retornar uma página, as 
páginas são armazenadas nos \textit{templates} -- que são arquivos \textit{HTML} 
que possuem sua própria lógica para interpretar aquilo que recebe e no final 
renderizar a página \textit{HTML}.

%Na requisição existe várias informações. Umas delas é a \textit{URL}, que é
%composta pelo protocolo, domínio, a porta(que pode aparecer ou não), caminho 
%e parâmetros(que pode aparecer ou não).

%Exemplo:\newline
%\textit{http://localhost:8080/admin/?nome=NOME\&Idade=IDADE} 
	   
%\par Quando a porta não é informada, automaticamente é utilizada a porta padrão 
%do protocolo \textit{HTTP}.

%As outras informações são sobre o navegador e computador do usuário que são: 
%\textit{IP}, sistema operacional, idioma, \textit{cookie} entre outros.
%Depois da requisição a primeira ação está no \textit{handler}, que não é feita
%manualmente, é o primeiro passo antes de chegar no \textit{middleware} e também
%é o último passo antes da resposta voltar ao \textit{Django} para o usuário
%final. Já o \textit{middleware} são códigos que analisam a requisição na
%entrada e na saída. Neste passo é aonde memorizar tanto os parâmetros quanto os
%caminhos para que na próxima requisição seja memorizadas estes componentes e
%evita o trabalho de ser processado novamente pela \textit{view}, além de fazer
%o processo de segurança e autenticação. No passo seguinte quando passa pelo
%\textit{middleware}, a requisição é analisada pelo \textit{URL Dispatcher} que
%é um importante componente do \textit{Django} que verifica -- especialmente a
%parte do caminho -- o arquivo urls.py do projeto para apontar qual
%view será chamada para dar a resposta. A \textit{view} é uma função em
%\textit{python} e na maioria das vezes escrita pelo desenvolvedor. Basicamente
%a função dela é receber a requisição(\textit{Httprequest}) e retorna uma
%resposta(\textit{HttpResponse}).E seu trabalho diário é analisar um requisição,
%fazer algo no banco e retorna uma página.

%O usuário requista uma página web. Quando chega uma solicitação para um
%\textit{URL} específico o
%\textit{Django} aponta para a \textit{URLconf} que por sua vez envia o valor
%para o \textit{ROOT\_URLCONF}\footnote{Variável de configuração contém um
%cenário que aponta para a url.py }.
%Então, ele verifica a cada um dos \textit{urlpatterns} da \textit{URLconf} em
%que, no fim, vai ser comparado 
%a uma \textit{URL} solicitada até encontrar um que corresponda. 
%Quando encontra um que corresponda, ele chama a função \textit{view}
%associado, 
%passando um objeto \textit{HttpRequest} como o primeiro parâmetro. 
%A função \textit{view} deve retornar um \textit{HttpResponse}.
%Uma vez que ele faz isso, o \textit{Django} faz o resto, convertendo o
%\textit{Python} para uma resposta adequada 
%da Web com os cabeçalhos \textit{HTTP} adequada e o corpo (ou seja, o conteúdo
%da página Web).
  
%\begin{enumerate}
 %   \item A requisição vem dentro da Url;
  %  \item O super usuário é determinado pelo Django de acordo com a
%configuração do ROOT\_URLCONF;
%	\item Django procura todos Urlpatterns no Urlconf a procura da primeira
%requisção que identifica a Url solicitada. 
 %   \item Se ele encontrar a requisição, ele chama a função de \textit{view}
  %     associado. 
%	\item A função de \textit{view} retorna um \textit{HttpResponse}
 %   \item Através do django é requisitado o site que acessa dados do banco de dados
  %     em arquivos locais e retorna para seu navegador a página, ou seja, o
   %    Django converte \textit{HttpResponse} para a resposta HTTP adequada, o
    %   que resulta em uma página da Web com funcionalidades em geral.
%\end{enumerate}

\begin{figure}[ht]
    \includegraphics[scale=0.7]{images/django-framework-marinho1.eps}
    \caption{Funcionamento do Django}
    \label{fig:howtoworksdjango}
\end{figure}
\nocite{Aprendendo_Django}
